package src.model.gameWorld.pathfinding;

import java.util.ArrayList;
import java.util.NoSuchElementException;

import src.model.gameObject.GameObject;
import src.model.gameObject.GameObjectType;
import src.model.gameWorld.Position;
import src.model.gameWorld.pathfinding.movement.Direction;

/**
 * <b>Overview</b>
 * Represents a map that can be used for pathfinding using the pathfinding package.
 *
 * <b>Responsibilities</b>
 * Allow a pathfinder to find its way across the map.
 *
 * <b>Collaborators</b>
 * Position - Subcontractor: Positions maintain the actual coordinates of each location on a map.
 *
 * <b>Implementor</b> - Bruce
 * <b>Tester</b> - Tim
 *
 * @author Bruce
 */
public interface PathfindingMap
{
	/**
	 * @param position the Position to start from.
	 * @return possible movement vectors from the specified src.model.gameWorld.Position.
	 * @throws NoSuchElementException if the specified src.model.gameWorld.Position is not in this PathfindingMap.
	 */
	public ArrayList<src.model.gameWorld.Position> adjacentPositions(Position position) throws NoSuchElementException;

	/**
	 * @param start the starting src.model.gameWorld.Position.
	 * @param destination the destination src.model.gameWorld.Position.
	 * @return the Direction one must travel in to get from the starting src.model.gameWorld.Position to the destination src.model.gameWorld.Position.
	 */
	public Direction getDirectionTo(src.model.gameWorld.Position start, src.model.gameWorld.Position destination);

	/**
	 * @return the PathfindingTerrain at this location.
	 */
	public GameObject getTerrain(src.model.gameWorld.Position loc);

	public Position findObject(GameObject go);
}